﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BreukenOpdracht
{
    /// <summary>
    /// De driver klasse
    /// </summary>
    public class Program
    {
        /// <summary>
        /// Ingangspunt van het programma
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            BreukContainer container = new BreukContainer();
            Console.WriteLine("Hoeveel breuken wilt u aanmaken?");
            int n = int.Parse(Console.ReadLine());
            for(int i = 0; i < n; i++)
            {
                Console.WriteLine("Wat is de teller?");
                int tel = int.Parse(Console.ReadLine());
                Console.WriteLine("Wat is de noemer");
                int noem = int.Parse(Console.ReadLine());
                try
                {
                    Breuk b = new Breuk(tel, noem);
                    container.Add(b);
                }
                catch (ArithmeticException ex)
                {
                    Console.WriteLine(ex.ToString());
                    i--;
                }
            }
            PrintAlles(container);
            container.MaakLeeg();
            for (int i = 0; i < n; i++)
            {
                Breuk b = Breuk.RandomBreuk(1, 6);
                container.Add(b);
            }
            PrintAlles(container);
            Console.ReadKey();
        }

        /// <summary>
        /// Deze methode print van alles da me diene container te maken
        /// heeft af op het scherm
        /// </summary>
        /// <param name="container"></param>
        public static void PrintAlles(BreukContainer container)
        {
            Breuk b;
            Console.WriteLine("-----------Overzicht Breukcontainer------------");
            container.Formatter = new DefaultFormatter();
            Console.WriteLine("Overzicht van de breuken:");
            Console.WriteLine(container.Overzicht());

            b = container.SomAlle();
            Console.WriteLine("De som van alle breuken is:");            
            Console.WriteLine(b.ToString() + " = " + b.Vereenvoudig().ToString() +" = " + b.DecimaleWaarde(3));

            b = container.VerschilAlle();
            Console.WriteLine("Het verschil van alle breuken is:");
            Console.WriteLine(b.ToString() + " = " + b.Vereenvoudig().ToString() + " = " + b.DecimaleWaarde(3));

            b = container.ProductAlle();
            Console.WriteLine("Het product van alle breuken is:");
            Console.WriteLine(b.ToString() + " = " + b.Vereenvoudig().ToString() + " = " + b.DecimaleWaarde(3));

            b = container.QuotientAlle();
            Console.WriteLine("De qoutient van alle breuken is:");
            Console.WriteLine(b.ToString() + " = " + b.Vereenvoudig().ToString() + " = " + b.DecimaleWaarde(3));

            container.Formatter = new GrootKleinFormatter();

            Console.WriteLine("Van goot naar klein:");
            Console.WriteLine(container.Overzicht());

            container.Formatter = new KleinGrootFormatter();
            Console.WriteLine("Van klein naar groot:");
            Console.WriteLine(container.Overzicht());
            Console.WriteLine("---------------Einde--------------");
        }
    }
}
